﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AntikCompta.Data;

namespace AntikCompta
{
    public partial class NewVente : Form
    {
        private Produit mProd;
        private Exercice mExercice;
        private Stock mStock;
        internal NewVente(ref Stock aStock, ref Exercice aExercice)
        {
            mStock = aStock;
            mExercice = aExercice;
            InitializeComponent();
            Init();
        }

        public NewVente(ref Exercice aExercice, ref Produit aProd)
        {
            mExercice = aExercice;
            InitializeComponent();
            Init();

            mProd = aProd;

            button3.Enabled = false;

            SetValues();

            SAI_DateVente.Value = mProd.DateVente;
            CB_Acheteur.SelectedIndex = CB_Acheteur.FindString(mProd.Acheteur.Nom);
            CB_PayementVente.SelectedIndex = CB_PayementVente.FindString(mProd.ModePayementVente.Nom);
            SAI_PrixVente.Text = mProd.PrixVente+"";
            SAI_FactureVente.Text = mProd.FactureVente;
        }

        private void Init()
        {          
            CB_Vendeur.Items.Add(new VendeurParticulier());
            CB_Vendeur.Items.Add(new VendeurMarchandHt());
            CB_Vendeur.SelectedIndex = 0;

            CB_Payement.Items.Add(new Especes());
            CB_Payement.Items.Add(new Cheque());
            CB_Payement.SelectedIndex = 0;

            SAI_DateVente.Value = SAI_DateVente.MinDate;

            CB_Acheteur.Items.Add("Aucun");
            CB_Acheteur.Items.Add(new AcheteurParticulier());
            CB_Acheteur.Items.Add(new AcheteurMarchandFr());
            CB_Acheteur.Items.Add(new AcheteurExportEu());
            CB_Acheteur.Items.Add(new AcheteurExportHEu());
            CB_Acheteur.SelectedIndex = 0;

            CB_PayementVente.Items.Add("Aucun");
            CB_PayementVente.Items.Add(new Especes());
            CB_PayementVente.Items.Add(new Cheque());
            CB_PayementVente.SelectedIndex = 0;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            StockWnd wnd = new StockWnd("Stock de l'année " + mExercice.Annee, ref mStock, mExercice.Annee);
            if (wnd.ShowDialog() == DialogResult.OK)
            {
                String reference = wnd.GetSelectedReference();
                if (mStock.GetProduit(reference, out mProd) == true)
                    SetValues();
            }
        }

        private bool SetValues()
        {
            if (mProd == null)
                return false;

            SAI_Ref.Text = mProd.Reference;
            SAI_Nom.Text = mProd.Nom;
            SAI_Prix.Text = mProd.PrixAchat+"";
            SAI_Date.Value = mProd.DateAchat;
            SAI_InfosVendeur.Text = mProd.InfosVendeur;

            CB_Vendeur.SelectedIndex = CB_Vendeur.FindString(mProd.Vendeur.Nom);
            CB_Payement.SelectedIndex = CB_Payement.FindString(mProd.ModePayementAchat.Nom);

            button1.Enabled = mProd != null;

            return true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (ValiderVente() == false)
                return;

            mProd.DateVente = SAI_DateVente.Value;
            mProd.Acheteur = (Acheteur)CB_Acheteur.SelectedItem;
            mProd.ModePayementVente = (ModePayement)CB_PayementVente.SelectedItem;
            mProd.PrixVente = SAI_PrixVente.FloatValue;
            mProd.FactureVente = SAI_FactureVente.Text;

            DialogResult = DialogResult.OK;
            Close();
        }

        private bool ValiderVente()
        {
            if (SAI_DateVente.Value == SAI_DateVente.MinDate)
            {
                MessageBox.Show("Tu n'as pas indiqué de date");
                return false;
            }
            else if (SAI_DateVente.Value.Year != mExercice.Annee)
            {
                MessageBox.Show("L'année de vente ne correspond pas à celle de l'exercice en court");
                return false;
            }
            else if (CB_Acheteur.SelectedIndex == 0)
            {
                MessageBox.Show("Tu n'as pas sélectionné de type d'acheteur");
                return false;
            }
            else if (CB_PayementVente.SelectedIndex == 0)
            {
                MessageBox.Show("Tu n'as pas sélectionné de mode de paiement");
                return false;
            }
            else if (SAI_PrixVente.Text.Length <= 0)
            {
                MessageBox.Show("Pas de prix de vente");
                return false;
            }
            else if ((cb_facture.Checked) && (SAI_FactureVente.Text.Length <= 0))
            {
                MessageBox.Show("Tu n'as pas donné de facture");
                return false;
            }

            return true;
        }

        internal bool GetProduit(out Produit aProd)
        {
            aProd = mProd;
            return mProd != null;
        }

        private void SAI_Ref_Validated(object sender, EventArgs e)
        {
            if (mStock.GetProduit(SAI_Ref.Text, out mProd) == false)
                MessageBox.Show("Référence inexistante");
            else if( mProd.DateVente!=DateTime.MinValue)
                MessageBox.Show("Produit déjà vendu en : " + mProd.DateVente.Year);
            else
                SetValues();
        }
    }
}
